package com.yuju.init.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yuju.cache.RedisCache;
import com.yuju.cache.RedisPluginInit;
import com.yuju.constant.CacheKey;
import com.yuju.group.model.GroupParamModel;
import com.yuju.group.service.IGroupParamService;

/**
 * Created by xuehj on 2017/10/13 0013.
 * 此类由Spring容器负责实例化，可用作系统初始化
 */
@Component
public class SysInit implements ApplicationListener<ContextRefreshedEvent> {
	// 这里可以注入Service
	@Autowired
	private IGroupParamService groupParamService;
	
    private RedisCache simpleCache = RedisCache.getInstance();
    
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
    	// event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")
    	// 执行初始化
        if (event.getApplicationContext().getParent() == null) {
            System.out.println("================系统初始化=====================");
        	// 初始化系统缓存
        	initSysCache(event);
        	// 初始化系统参数
        	initSysParam(event);
        }
    }
    
    /**
     * 
     * 功能：初始化系统参数<br/>
     *
     * @author xuehj
     * @param event
     * @Date 2018年1月17日 下午5:31:22 <br/>
     */
    private void initSysParam(ContextRefreshedEvent event) {
    	List<GroupParamModel> paramList = groupParamService.list(null);
    	for (GroupParamModel model : paramList) {
    		simpleCache.addCache(model.getGroupId() + model.getCode() + CacheKey.KEY_GRP_PARAM, model.getValue());
    	}
    }
    
    /**
     * 
     * 功能：创建/初始 化系统缓存<br/>
     *
     * @author xuehj
     * @param event
     * @Date 2017年12月19日 上午9:42:03 <br/>
     */
    private void initSysCache(ContextRefreshedEvent event) {
    	String flag = event.getApplicationContext().getEnvironment().getProperty("spring.profiles.active");
    	RedisPluginInit.initCache(flag);
    }
}
